﻿
using System;
using System.Data.SqlClient;
using System.Globalization;
using System.Runtime.Serialization;
using ProtoBuf;/*https://github.com/ServiceStack/ServiceStack/tree/master/lib*/
using ServiceStack.Text;/*https://github.com/ServiceStack/ServiceStack.Text*/
using V82;
using V82.ОбщиеОбъекты;
using V82.СправочникиСсылка;
using V82.СправочникиОбъект;
using V82.ДокументыСсылка;
using V82.Перечисления;//Ссылка;
namespace V82.СправочникиОбъект
{
	[ProtoContract]
	[DataContract]
	public partial class УчетныеЗаписиДокументооборота:СправочникОбъект
	{
		public bool _ЭтоНовый;
		public bool ЭтоНовый()
		{
			return _ЭтоНовый;
		}
		[DataMember]
		[ProtoMember(1)]
		public Guid Ссылка {get;set;}
		[DataMember]
		[ProtoMember(2)]
		public long Версия {get;set;}
		[DataMember]
		[ProtoMember(3)]
		public string ВерсияДанных {get;set;}
		/*static хэш сумма состава и порядка реквизитов*/
		/*версия класса восстановленного из пакета*/
		[DataMember]
		[ProtoMember(4)]
		public bool ПометкаУдаления {get;set;}
		[DataMember]
		[ProtoMember(5)]
		public bool Предопределенный {get;set;}
		[DataMember]
		[ProtoMember(6)]
		public string/*5*/ Код {get;set;}
		[DataMember]
		[ProtoMember(7)]
		public string/*150*/ Наименование {get;set;}
		[DataMember]
		[ProtoMember(8)]
		public string/*(255)*/ ИмяПользователяPOP3 {get;set;}//Имя пользователя POP3
		[DataMember]
		[ProtoMember(9)]
		public string/*(255)*/ ПарольPOP3 {get;set;}//Пароль POP3
		[DataMember]
		[ProtoMember(10)]
		public string/*(255)*/ СерверPOP3 {get;set;}//Сервер POP3
		[DataMember]
		[ProtoMember(11)]
		public decimal/*(5)*/ ПортPOP3 {get;set;}//Порт POP3
		[DataMember]
		[ProtoMember(12)]
		public string/*(255)*/ ИмяПользователяSMTP {get;set;}//Имя пользователя SMTP
		[DataMember]
		[ProtoMember(13)]
		public string/*(255)*/ ПарольSMTP {get;set;}//Пароль SMTP
		[DataMember]
		[ProtoMember(14)]
		public string/*(255)*/ СерверSMTP {get;set;}//Сервер SMTP
		[DataMember]
		[ProtoMember(15)]
		public decimal/*(5)*/ ПортSMTP {get;set;}//Порт SMTP
		[DataMember]
		[ProtoMember(16)]
		public bool ТребуетсяSMTPАутентификация {get;set;}//Требуется SMTP Аутентификация
		[DataMember]
		[ProtoMember(17)]
		public string/*(255)*/ АдресЭлектроннойПочты {get;set;}//Адрес электронной почты
		[DataMember]
		[ProtoMember(18)]
		public V82.СправочникиСсылка.НалоговыеОрганы НалоговыйОрган {get;set;}//Налоговый орган
		[DataMember]
		[ProtoMember(19)]
		public V82.СправочникиСсылка.СерверыДокументооборота СерверДокументооборота {get;set;}//Сервер документооборота
		[DataMember]
		[ProtoMember(20)]
		public string/*(40)*/ СертификатРуководителя {get;set;}//Сертификат руководителя
		[DataMember]
		[ProtoMember(21)]
		public string/*(40)*/ СертификатГлавногоБухгалтера {get;set;}//Сертификат главного бухгалтера
		[DataMember]
		[ProtoMember(22)]
		public string/*(40)*/ СертификатДляШифрования {get;set;}//Сертификат для шифрования
		[DataMember]
		[ProtoMember(23)]
		public bool УдалитьАвтоматическоеОпределениеНабораПодписей {get;set;}//Удалить автоматическое определение набора подписей
		[DataMember]
		[ProtoMember(24)]
		public bool ИспользуютсяСъемныеКлючевыеНосители {get;set;}//Используются съемные ключевые носители
		[DataMember]
		[ProtoMember(25)]
		public bool УдалитьНестандартныеТаймауты {get;set;}//Нестандартные таймауты
		[DataMember]
		[ProtoMember(26)]
		public decimal/*(2)*/ УдалитьТаймаутНалоговогоОргана {get;set;}//Таймаут налогового органа
		[DataMember]
		[ProtoMember(27)]
		public decimal/*(2)*/ УдалитьТаймаутНалогоплательщика {get;set;}//Таймаут налогоплательщика
		[DataMember]
		[ProtoMember(28)]
		public bool УдалитьИспользуетсяОбособленнымиПодразделениями {get;set;}//Удалить используется обособленными подразделениями
		[DataMember]
		[ProtoMember(29)]
		public bool ОбменНапрямую {get;set;}//Используется возможность документооборота без посредничества специализированного оператора связи
		[DataMember]
		[ProtoMember(30)]
		public bool ОбменНапрямуюСФСГС {get;set;}//Используется возможность документооборота с Росстатом без посредничества специализированного оператора связи
		[DataMember]
		[ProtoMember(31)]
		public bool НеФормироватьПодтвержденияАвтоматически {get;set;}//Не формировать подтверждения автоматически
		[DataMember]
		[ProtoMember(32)]
		public V82.Перечисления/*Ссылка*/.РежимыАвтонастройкиУчетнойЗаписиДокументооборота РежимАвтонастройки {get;set;}//Режим автонастройки
		[DataMember]
		[ProtoMember(33)]
		public bool ИспользоватьСервисОнлайнПроверкиОтчетов {get;set;}//Использовать сервис онлайн-проверки отчетов
		[DataMember]
		[ProtoMember(34)]
		public bool ПредназначенаДляДокументооборотаСФНС {get;set;}//Предназначена для документооборота с ФНС
		[DataMember]
		[ProtoMember(35)]
		public bool ПредназначенаДляДокументооборотаСПФР {get;set;}//Предназначена для документооборота с ПФР
		[DataMember]
		[ProtoMember(36)]
		public bool ПредназначенаДляДокументооборотаСФСГС {get;set;}//Предназначена для документооборота с Росстатом
		[DataMember]
		[ProtoMember(37)]
		public string/*(3)*/ ИдентификаторСпецоператора {get;set;}//Идентификатор спецоператора
		[DataMember]
		[ProtoMember(38)]
		public string/*(43)*/ ИдентификаторАбонента {get;set;}
		[DataMember]
		[ProtoMember(39)]
		public string/*(40)*/ ИдентификаторСистемыОтправителяПФР {get;set;}//Идентификатор системы отправителя (ПФР)
		[DataMember]
		[ProtoMember(40)]
		public string/*(40)*/ ИдентификаторСистемыОтправителяФСГС {get;set;}//Идентификатор системы отправителя (ФСГС)
		[DataMember]
		[ProtoMember(41)]
		public bool ЯвляетсяУчетнойЗаписьюУполномоченногоПредставителя {get;set;}//Является учетной записью уполномоченного представителя
		[DataMember]
		[ProtoMember(42)]
		public string/*(12)*/ ИННУполномоченногоПредставителя {get;set;}//ИНН уполномоченного представителя
		[DataMember]
		[ProtoMember(43)]
		public string/*(9)*/ КППУполномоченногоПредставителя {get;set;}//КПП уполномоченного представителя
		[DataMember]
		[ProtoMember(44)]
		public string/*(0)*/ ПолноеНаименованиеУполномоченногоПредставителя {get;set;}//Полное наименование уполномоченного представителя
		[DataMember]
		[ProtoMember(45)]
		public V82.Перечисления/*Ссылка*/.СтатусыУчетнойЗаписиДокументооборота СтатусУчетнойЗаписи {get;set;}//Статус учетной записи
		[DataMember]
		[ProtoMember(46)]
		public V82.Перечисления/*Ссылка*/.СпецоператорыСвязи СпецоператорСвязи {get;set;}//Спецоператор связи
		public void Записать()
		{
			//Установка блокировки элемента на горизантально масштабированный кластер.
			//Опционально введение тайм аута на запись одного и того же объекта, не чаще раза в 5-секунд. Защита от спама. упращение алгоритма блокировки.
			//Выделение сервиса для блокировки элемента и генерации кода
			//Выполнение операций контроля без обращений к sql-серверу.
			//Контроль конфликта блокировок.
			//Контроль загрузки булкинсертом гетерогенной коллекции.
			//Контроль уникальности кода для справочников.
			//Контроль уникальности номера для документов, в границах префикса.
			//Контроль владельца, он не может быть группой.
			//Контроль владельца он должен быть задан.
			//Контроль родителя он должен быть группой.
			//Контроль количества уровней, должен соотвествовать метаданным.
			//Контроль версии, объект не должен был быть записан перед чтением текущей записи, алгоритм версионника.
			//Контроль уникальности ссылки
			//Контроль зацикливания
			//Опционально контроль битых ссылок.
			//Соблюдейние транзакционности. ПередЗаписью. Открытие транзации. Валидации. ПриЗаписи. Фиксация транзакции. Информирование о записи элемента.
			using (var Подключение = new SqlConnection(СтрокаСоединения))
			{
				Подключение.Open();
				using (var Команда = Подключение.CreateCommand())
				{
					if(_ЭтоНовый)
					{
						Команда.CommandText = @"
						Insert Into _Reference23135(
						_IDRRef
						/*,_Version*/
						,_Marked
						,_IsMetadata
						,_Code
						,_Description
						,_Fld23827
						,_Fld23828
						,_Fld23829
						,_Fld23830
						,_Fld23831
						,_Fld23832
						,_Fld23833
						,_Fld23834
						,_Fld23835
						,_Fld23836
						,_Fld23837RRef
						,_Fld23838RRef
						,_Fld23839
						,_Fld23840
						,_Fld23841
						,_Fld23842
						,_Fld23843
						,_Fld23844
						,_Fld23845
						,_Fld23846
						,_Fld23847
						,_Fld23848
						,_Fld23849
						,_Fld23850
						,_Fld23851RRef
						,_Fld23852
						,_Fld23853
						,_Fld23854
						,_Fld23855
						,_Fld23856
						,_Fld23857
						,_Fld23858
						,_Fld23859
						,_Fld23860
						,_Fld23861
						,_Fld23862
						,_Fld23863
						,_Fld23864RRef
						,_Fld23865RRef)
						Values(
						@Ссылка
						/*,@Версия*/
						,@ПометкаУдаления
						,@Предопределенный
						,@Код
						,@Наименование
						,@ИмяПользователяPOP3
						,@ПарольPOP3
						,@СерверPOP3
						,@ПортPOP3
						,@ИмяПользователяSMTP
						,@ПарольSMTP
						,@СерверSMTP
						,@ПортSMTP
						,@ТребуетсяSMTPАутентификация
						,@АдресЭлектроннойПочты
						,@НалоговыйОрган
						,@СерверДокументооборота
						,@СертификатРуководителя
						,@СертификатГлавногоБухгалтера
						,@СертификатДляШифрования
						,@УдалитьАвтоматическоеОпределениеНабораПодписей
						,@ИспользуютсяСъемныеКлючевыеНосители
						,@УдалитьНестандартныеТаймауты
						,@УдалитьТаймаутНалоговогоОргана
						,@УдалитьТаймаутНалогоплательщика
						,@УдалитьИспользуетсяОбособленнымиПодразделениями
						,@ОбменНапрямую
						,@ОбменНапрямуюСФСГС
						,@НеФормироватьПодтвержденияАвтоматически
						,@РежимАвтонастройки
						,@ИспользоватьСервисОнлайнПроверкиОтчетов
						,@ПредназначенаДляДокументооборотаСФНС
						,@ПредназначенаДляДокументооборотаСПФР
						,@ПредназначенаДляДокументооборотаСФСГС
						,@ИдентификаторСпецоператора
						,@ИдентификаторАбонента
						,@ИдентификаторСистемыОтправителяПФР
						,@ИдентификаторСистемыОтправителяФСГС
						,@ЯвляетсяУчетнойЗаписьюУполномоченногоПредставителя
						,@ИННУполномоченногоПредставителя
						,@КППУполномоченногоПредставителя
						,@ПолноеНаименованиеУполномоченногоПредставителя
						,@СтатусУчетнойЗаписи
						,@СпецоператорСвязи)";
					}
					else
					{
						Команда.CommandText = @"
						Update _Reference23135
						Set
						/*_IDRRef	= @Ссылка*/
						/*,_Version	= @Версия*/
						_Marked	= @ПометкаУдаления
						,_IsMetadata	= @Предопределенный
						,_Code	= @Код
						,_Description	= @Наименование
						,_Fld23827	= @ИмяПользователяPOP3
						,_Fld23828	= @ПарольPOP3
						,_Fld23829	= @СерверPOP3
						,_Fld23830	= @ПортPOP3
						,_Fld23831	= @ИмяПользователяSMTP
						,_Fld23832	= @ПарольSMTP
						,_Fld23833	= @СерверSMTP
						,_Fld23834	= @ПортSMTP
						,_Fld23835	= @ТребуетсяSMTPАутентификация
						,_Fld23836	= @АдресЭлектроннойПочты
						,_Fld23837RRef	= @НалоговыйОрган
						,_Fld23838RRef	= @СерверДокументооборота
						,_Fld23839	= @СертификатРуководителя
						,_Fld23840	= @СертификатГлавногоБухгалтера
						,_Fld23841	= @СертификатДляШифрования
						,_Fld23842	= @УдалитьАвтоматическоеОпределениеНабораПодписей
						,_Fld23843	= @ИспользуютсяСъемныеКлючевыеНосители
						,_Fld23844	= @УдалитьНестандартныеТаймауты
						,_Fld23845	= @УдалитьТаймаутНалоговогоОргана
						,_Fld23846	= @УдалитьТаймаутНалогоплательщика
						,_Fld23847	= @УдалитьИспользуетсяОбособленнымиПодразделениями
						,_Fld23848	= @ОбменНапрямую
						,_Fld23849	= @ОбменНапрямуюСФСГС
						,_Fld23850	= @НеФормироватьПодтвержденияАвтоматически
						,_Fld23851RRef	= @РежимАвтонастройки
						,_Fld23852	= @ИспользоватьСервисОнлайнПроверкиОтчетов
						,_Fld23853	= @ПредназначенаДляДокументооборотаСФНС
						,_Fld23854	= @ПредназначенаДляДокументооборотаСПФР
						,_Fld23855	= @ПредназначенаДляДокументооборотаСФСГС
						,_Fld23856	= @ИдентификаторСпецоператора
						,_Fld23857	= @ИдентификаторАбонента
						,_Fld23858	= @ИдентификаторСистемыОтправителяПФР
						,_Fld23859	= @ИдентификаторСистемыОтправителяФСГС
						,_Fld23860	= @ЯвляетсяУчетнойЗаписьюУполномоченногоПредставителя
						,_Fld23861	= @ИННУполномоченногоПредставителя
						,_Fld23862	= @КППУполномоченногоПредставителя
						,_Fld23863	= @ПолноеНаименованиеУполномоченногоПредставителя
						,_Fld23864RRef	= @СтатусУчетнойЗаписи
						,_Fld23865RRef	= @СпецоператорСвязи
						Where _IDRRef = @Ссылка";
					}
					Команда.Parameters.AddWithValue("Ссылка", Ссылка.ToByteArray());
					/*Команда.Parameters.AddWithValue("Версия", Версия);*/
					Команда.Parameters.AddWithValue("ПометкаУдаления", ПометкаУдаления);
					Команда.Parameters.AddWithValue("Предопределенный", Предопределенный);
					Команда.Parameters.AddWithValue("Код", Код);
					Команда.Parameters.AddWithValue("Наименование", Наименование);
					Команда.Parameters.AddWithValue("ИмяПользователяPOP3", ИмяПользователяPOP3);
					Команда.Parameters.AddWithValue("ПарольPOP3", ПарольPOP3);
					Команда.Parameters.AddWithValue("СерверPOP3", СерверPOP3);
					Команда.Parameters.AddWithValue("ПортPOP3", ПортPOP3);
					Команда.Parameters.AddWithValue("ИмяПользователяSMTP", ИмяПользователяSMTP);
					Команда.Parameters.AddWithValue("ПарольSMTP", ПарольSMTP);
					Команда.Parameters.AddWithValue("СерверSMTP", СерверSMTP);
					Команда.Parameters.AddWithValue("ПортSMTP", ПортSMTP);
					Команда.Parameters.AddWithValue("ТребуетсяSMTPАутентификация", ТребуетсяSMTPАутентификация);
					Команда.Parameters.AddWithValue("АдресЭлектроннойПочты", АдресЭлектроннойПочты);
					Команда.Parameters.AddWithValue("НалоговыйОрган", НалоговыйОрган.Ссылка);
					Команда.Parameters.AddWithValue("СерверДокументооборота", СерверДокументооборота.Ссылка);
					Команда.Parameters.AddWithValue("СертификатРуководителя", СертификатРуководителя);
					Команда.Parameters.AddWithValue("СертификатГлавногоБухгалтера", СертификатГлавногоБухгалтера);
					Команда.Parameters.AddWithValue("СертификатДляШифрования", СертификатДляШифрования);
					Команда.Parameters.AddWithValue("УдалитьАвтоматическоеОпределениеНабораПодписей", УдалитьАвтоматическоеОпределениеНабораПодписей);
					Команда.Parameters.AddWithValue("ИспользуютсяСъемныеКлючевыеНосители", ИспользуютсяСъемныеКлючевыеНосители);
					Команда.Parameters.AddWithValue("УдалитьНестандартныеТаймауты", УдалитьНестандартныеТаймауты);
					Команда.Parameters.AddWithValue("УдалитьТаймаутНалоговогоОргана", УдалитьТаймаутНалоговогоОргана);
					Команда.Parameters.AddWithValue("УдалитьТаймаутНалогоплательщика", УдалитьТаймаутНалогоплательщика);
					Команда.Parameters.AddWithValue("УдалитьИспользуетсяОбособленнымиПодразделениями", УдалитьИспользуетсяОбособленнымиПодразделениями);
					Команда.Parameters.AddWithValue("ОбменНапрямую", ОбменНапрямую);
					Команда.Parameters.AddWithValue("ОбменНапрямуюСФСГС", ОбменНапрямуюСФСГС);
					Команда.Parameters.AddWithValue("НеФормироватьПодтвержденияАвтоматически", НеФормироватьПодтвержденияАвтоматически);
					Команда.Parameters.AddWithValue("РежимАвтонастройки", РежимАвтонастройки.Ключ());
					Команда.Parameters.AddWithValue("ИспользоватьСервисОнлайнПроверкиОтчетов", ИспользоватьСервисОнлайнПроверкиОтчетов);
					Команда.Parameters.AddWithValue("ПредназначенаДляДокументооборотаСФНС", ПредназначенаДляДокументооборотаСФНС);
					Команда.Parameters.AddWithValue("ПредназначенаДляДокументооборотаСПФР", ПредназначенаДляДокументооборотаСПФР);
					Команда.Parameters.AddWithValue("ПредназначенаДляДокументооборотаСФСГС", ПредназначенаДляДокументооборотаСФСГС);
					Команда.Parameters.AddWithValue("ИдентификаторСпецоператора", ИдентификаторСпецоператора);
					Команда.Parameters.AddWithValue("ИдентификаторАбонента", ИдентификаторАбонента);
					Команда.Parameters.AddWithValue("ИдентификаторСистемыОтправителяПФР", ИдентификаторСистемыОтправителяПФР);
					Команда.Parameters.AddWithValue("ИдентификаторСистемыОтправителяФСГС", ИдентификаторСистемыОтправителяФСГС);
					Команда.Parameters.AddWithValue("ЯвляетсяУчетнойЗаписьюУполномоченногоПредставителя", ЯвляетсяУчетнойЗаписьюУполномоченногоПредставителя);
					Команда.Parameters.AddWithValue("ИННУполномоченногоПредставителя", ИННУполномоченногоПредставителя);
					Команда.Parameters.AddWithValue("КППУполномоченногоПредставителя", КППУполномоченногоПредставителя);
					Команда.Parameters.AddWithValue("ПолноеНаименованиеУполномоченногоПредставителя", ПолноеНаименованиеУполномоченногоПредставителя);
					Команда.Parameters.AddWithValue("СтатусУчетнойЗаписи", СтатусУчетнойЗаписи.Ключ());
					Команда.Parameters.AddWithValue("СпецоператорСвязи", СпецоператорСвязи.Ключ());
					Команда.ExecuteNonQuery();
				}
			}
		}
		public void Удалить()
		{
			using (var Подключение = new SqlConnection(СтрокаСоединения))
			{
				Подключение.Open();
				using (var Команда = Подключение.CreateCommand())
				{
					Команда.CommandText = @"Delete _Reference23135
					Where _IDRRef=@Ссылка";
					Команда.Parameters.AddWithValue("Ссылка", Ссылка.ToByteArray());
					Команда.ExecuteNonQuery();
				}
			}
		}
		/*МодульОбъекта*/

		public void ПередЗаписью(/*Отказ*/)
		{
			if(true/*ОбменДанными.Загрузка*/)
			{
			}
			if(true/*КонтекстЭДО <> Неопределено*/)
			{
				//КонтекстЭДО.ПередЗаписьюОбъекта(ЭтотОбъект, Отказ);
			}
		}

		public void ПриЗаписи(/*Отказ*/)
		{
			if(true/*ОбменДанными.Загрузка*/)
			{
			}
			if(true/*КонтекстЭДО <> Неопределено*/)
			{
				//КонтекстЭДО.ПриЗаписиОбъекта(ЭтотОбъект, Отказ);
			}
		}

		public void ОбработкаЗаполнения(/*СообщениеОснование*/)
		{
			if(true/*КонтекстЭДО <> Неопределено*/)
			{
				//КонтекстЭДО.ОбработкаЗаполненияОбъекта(ЭтотОбъект, СообщениеОснование);
			}
		}
	}
}